CreateOLEObject Word

Otázka od: Pavel Malinsky

11. 5. 2004 15:01

Ahoj,

  mozna trochu prihloupla otazka, ale jeste
sem nemel potrebu to delat. Takze,
potrebuju vytvorit funkci, ktera mi v dokumentu
*.doc nahradi urcita slova vlastnimi(z DB).

Potrebuju:
1) otevrit Word (uz prvni potiz   )
2) natahnout do nej obsah z BLOBU v DB
3) pustit na povel uzivatele nejakou svou
   fci na nahrazeni nekterych slov
4) ulozit zpatky do BLOBU v DB

  Takze sem zacal tim, ze sem sice v helphu a v histori konfery
neco nasel, ale nedari se mi vubec vytvorit OLEObject  .

Pri CreateOLEObject('Word.Application') dostanu chybu,
ze "ClassFactory nemuze predat pozadovanou tridu".

Co delam, prosim, blbe ? Nebo snad mam jit jinou cestou,
jako treba pomoci komponent ze Servers ?

Env.: D5/D7, MS Office 2003

Zkousim:

procedure TForm1.Button1Click(Sender: TObject);
var
  WordApp: OLEVariant;
begin
  try
    WordApp:= CreateOLEObject('Word.Application');
    try
      WordApp.Visible:= True;
      // tady se bude neco dit
    finally
      WordApp.Quit;
      WordApp:= Unassigned;
    end;
  except
    on E: Exception do
      begin
        ShowMessage('Aplikace MS Word neni k dostupna !');
      end;
  end;

          S pozdravem a dikem
=====================================
> Pavel Malinsky; malinsky@pmcom.cz <
=====================================
> GSM: 602 652 203 | ICQ: 322015967 <
=====================================



Odpovedá: Pave Gazda

12. 5. 2004 6:53

Ahoj,

ja pouzivam toto


> 1) otevrit Word (uz prvni potiz   )


  WordApp := TWordApplication.Create(nil);
  try
    with WordApp do
    begin
      ConnectKind := ckRunningInstance; { pripojeni ke spustenemu Wordu }
      ConnectKind := ckNewInstance; { otevreni Wordu }
     ....
      DisplayAlerts := Olefalse;
      Activate;
      Result := 0;
    end;
  except
    WordApp.Free; { nebo FreeAndNil(WordApp) }
    WordApp := nil;
  end;


> 3) pustit na povel uzivatele nejakou svou
> fci na nahrazeni nekterych slov

      FDopredu := True;
      FWrap := wdFindContinue;
      FMatchCase := Boolean(Rozlisovat);
      FMatchWholeWord := Boolean(CelaSlova);
      FReplace := wdReplaceAll;

      WordObj.Dokumenty[idx].Activate;
      WordObj.Dokumenty[Idx].Application.Selection.Find.ClearFormatting;

      if WordObj.Verze < 9 then
        WordObj.Dokumenty[Idx].Application.Selection.Find.ExecuteOld
                (FText,FMatchCase,FMatchWholeWord,EmptyParam,
                 EmptyParam,EmptyParam,FDopredu,FWrap,EmptyParam,FNewText,
                 FReplace)
      else
        WordObj.Dokumenty[Idx].Application.Selection.Find.Execute
                (FText,FMatchCase,FMatchWholeWord,EmptyParam,
                 EmptyParam,EmptyParam,FDopredu,FWrap,EmptyParam,FNewText,
                 FReplace,EmptyParam,EmptyParam,EmptyParam,EmptyParam);


Pavel
placeny amater


Odpovedá: Pavel Malinsky

12. 5. 2004 10:20

> -----Original Message-----
> From: delphi-l-owner@clexpert.cz
> [mailto:delphi-l-owner@clexpert.cz] On Behalf Of Pave Gazda
>
> Ahoj,

Ahoj,

dik, ale mam porad ten samej problem. Pri Activate
skoncim chybou "ClassFactory nemuze predat pozadovanou tridu."
a dal se nedostanu...

> ja pouzivam toto
>
>
> > 1) otevrit Word (uz prvni potiz   )
>
>
> WordApp := TWordApplication.Create(nil);
> try
> with WordApp do
> begin
> ConnectKind := ckRunningInstance; { pripojeni ke
> spustenemu Wordu }
> ConnectKind := ckNewInstance; { otevreni Wordu }
> ....
> DisplayAlerts := Olefalse;
> Activate;
> Result := 0;
> end;
> except
> WordApp.Free; { nebo FreeAndNil(WordApp) }
> WordApp := nil;
> end;

          S pozdravem a dikem
=====================================
> Pavel Malinsky; malinsky@pmcom.cz <
=====================================
> GSM: 602 652 203 | ICQ: 322015967 <
=====================================



Odpovedá: Bohac Frantisek

12. 5. 2004 14:36

A reinstalace office 2003 by nepomohla? Popr. zkus spustit dcomcnfg.exe a
podivat se na prava dane tridy ... a pak uz nevim.

Na Office 2k/XP je pristup pres OLE bez problemu.

F.

----- Original Message -----

> dik, ale mam porad ten samej problem. Pri Activate
> skoncim chybou "ClassFactory nemuze predat pozadovanou tridu."
> a dal se nedostanu...


Odpovedá: Pavel Malinsky

12. 5. 2004 19:36

> -----Original Message-----
> From: delphi-l-owner@clexpert.cz
> [mailto:delphi-l-owner@clexpert.cz] On Behalf Of Bohac Frantisek
>
> A reinstalace office 2003 by nepomohla? Popr. zkus spustit
> dcomcnfg.exe a
> podivat se na prava dane tridy ... a pak uz nevim.

  Muzu poprosit o blizsi informace a popis co mam v te
konfiguraci hledat, pripadne jaka prava nastavit?
Sem vzdy administrator a i veskere instalace SW
jsou pod uctem admina.

> Na Office 2k/XP je pristup pres OLE bez problemu.

  Vsak si to pudu nekam vedle vyzkouset  .
Bohuzel to musim resit pro MSO 2003...

Env: WinXP Pro, MS Office 2003

> ----- Original Message -----
>
> > dik, ale mam porad ten samej problem. Pri Activate
> > skoncim chybou "ClassFactory nemuze predat pozadovanou tridu."
> > a dal se nedostanu...

          S pozdravem a dikem
=====================================
> Pavel Malinsky; malinsky@pmcom.cz <
=====================================
> GSM: 602 652 203 | ICQ: 322015967 <
=====================================



Odpovedá: Bohac Frantisek

13. 5. 2004 9:41

Jde o to, ze MS si nekdy nastavuje nesmyslne veci ve vztahu k zabezpeceni
... (viz OE6, kde implicitne zakazuje nebezpecne prilohy, ale dokumenty od
MS povoluje ... a prave v nich bych cekal nejakou chybu ...)

v tom dcomcnfg je treba prenastavit prava pro spousteni na tride:
"Dokument Aplikace Microsoft Word"
- zalozka Zabezpeceni: Pouzit vlastni spousteci prava ...

nemam XP ani Off2003, ale snad Ti tohle pomuze.

Na soukromy mail Ti posilam sejmute obrazovky.

F.

----- Original Message -----
> Muzu poprosit o blizsi informace a popis co mam v te
> konfiguraci hledat, pripadne jaka prava nastavit?
> Sem vzdy administrator a i veskere instalace SW
> jsou pod uctem admina.